package com.example.springgobang.game;

import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketSession;

import java.util.concurrent.ConcurrentHashMap;

// 表现用户的在线状态
@Component
public class OnlineUserManager {
    // 这个哈希表是用来表示当前用户在游戏大厅的在线状态.
    private ConcurrentHashMap<Integer, WebSocketSession> gameHall = new ConcurrentHashMap<>();
    // 这个哈希表用来表示当前用户在游戏房间的在线状态.
    private ConcurrentHashMap<Integer, WebSocketSession> gameRoom = new ConcurrentHashMap<>();
    // 进入游戏大厅,调用这个方法,把玩家的 WebSocket 连接信息保存到哈希表中
    public void enterGameHall(int userId, WebSocketSession webSocketSession) {
        gameHall.put(userId, webSocketSession);
    }

    // 离开游戏大厅,调用这个方法,把玩家的 WebSocket 连接信息从哈希表中删除
    public void exitGameHall(int userId) {
        gameHall.remove(userId);
    }

    // 调用这个方法,把玩家的 WebSocket 连接信息从哈希表中获取到
    public WebSocketSession getFromGameHall (int userId) {
        return gameHall.get(userId);
    }

    // 进入游戏房间,调用这个方法,把玩家的 WebSocket 连接信息保存到哈希表中
    public void enterGameRoom(int userId, WebSocketSession webSocketSession) {
        gameRoom.put(userId, webSocketSession);
    }

    // 离开游戏房间,调用这个方法,把玩家的 WebSocket 连接信息从哈希表中删除
    public void exitGameRoom(int userId) {
        gameRoom.remove(userId);
    }

    // 调用这个方法,把玩家的 WebSocket 连接信息从哈希表中获取到
    public WebSocketSession getFromGameRoom(int userId) {
        return gameRoom.get(userId);
    }
}
